עבודה עם Wireshark מאת עידו קנר - חלק שני הקדמה זהו החלק השני בסדרת מאמרים אשר נועדה לתת דגשים לכלי.Wireshark רבים רואים את Wireshark ככלי המאפשר להאזין )להסניף( את התעבורה ברשת, אך זו אינה בהכרח החוזקה שלו. בתחום זה יש תוכנות אחרות, כדוגמת fiddler ב- Windows, שלעתים מתאימות יותר כאשר רוצים לטפל ב- HTTP. של הכוח Wireshark בסינון הוא ובניתוח המידע, והיכולת בשביל בו להשתמש להבין, מעבר לרשימה פשוטהשל פקטות, מה קרה בתקשורת, ואת זה סדרת המאמרים באה ללמד. העבודה ב- Wireshark דורשת הכרות עם עולם ה- TCP/IP וכיצד מבנה של כמוסות ה- IP ו- TCP בנויות. בחלק הקודם הסברתי על הסביבה של Wireshark וכיצד להשתמש בכלים מאוד מוכרים שלה. בחלק זה אסביר כיצד מנתחים תקשורת מוצפנת באמצעות.Wireshark חשוב להדגיש כי כאשר כותבים,SSL אנחנו מדברים על הצפנת תעבורה ולא בהכרח על האלגוריתם שנקרא.SSL גם,TLS למשל, נכלל בהגדרה זו. בדיקת תמיכה ב- SSL לפני שאתחיל להסביר על הנושא חשוב לבדוק האם Wireshark תומך בכלל ב- SSL. התמיכה של Wireshark מתבצעת על ידי GnuTLS ו- GCrypt. אך ניתן לבנות את Wireshark ללא התמיכה בהצפנה ובמידה ו- Wireshark לא נבנה עם תמיכה זו צריך לבנות או לקחת גרסה בינרית של Wireshark עם התמיכה בספריות ההצפנה.
הדרך המהירה לבדיקה תעשה תחת: :Help->About הצפנות תקשורת בכללי בעולם התקשורת, כלומר עולם ה- TCP/IP, התפיסה של הצפנה דורשת התייחסות שונה מעט מאשר הצפנה למשל של קובץ או שלמידע שכולו צריך להיות שלם. הסיבה לכך היא שתקשורת מחייבת הרבה פעמים לפרק מידע להרבה גורמים בשביל שיעבור מנקודה אחת לשנייה. אבל התעבורה עצמה צריכה להיות בלתי נגישה למי שאינו אמור להיות צד בעניין, ותוך כדי כך אי אפשר לחכות שכל המידע יסתיים להגיע, אלא כל בקשה )פקטה( חייבת להצליח להיות מוצפנת ולהיות משוחררת חזרה למצב של ניתוח. זו הסיבה שכל בקשה צריכה מצד אחד הצפנה שתומכת בבלוק בודד שמוצפן, ומצד שני שתהיה היכולת להצפין ולפתוח בצורה יחסית מהירה בשימוש בכמה שפחות משאבים מבלי לגרוע באיכות ההצפנה. זהו אתגר ממש לא קל ו שי המון דרכים להתמודד עם הנושא, כדוגמת הקמת מנהרה מוצפנת שהמידע עצמו עובר תמיד בצורה מוצפנת, אבל התוכן שלו לא מחייב לעבור הצפנה )למשל IPSec מספק גישה שכזו(. 2
דרך שניה מאוד נפוצה היא הצפנה של כל payload בפקטה שלא ניתן יהיה לפתוח אותו אך שם יש חשיפה של מידע על התעבורה עצמה. דרך שלישית נפוצה מנסה לשלב בין הדברים: כלומר כל הפקטה מוצפנת, ובנוסף גם ה- payload. ישנן הרבה גישות לנושא, ו- Wireshark יודע להתמודד עם חלקן. בחלק האחרון של מאמר זה נרחיב על כך. ב- Wireshark SSL כאשר נמצאים ב Wireshark יג לגשת לתפריט.Edit ושם לתת התפריט.Preferences יפתח אז חלון עם הגדרות של.Wireshark במידה למטה עד שמוצאים את ההגדרה של.SSL ונכתוב בצורה מהירה SSL נוכל לגשת להגדרות SSL בנושא, או פשוט לגולל לאחר שנבחר פרוטוקול,SSL יפתח בצד ימין תת מסך עם הגדרות שונות. מספרתי את תתי ההגדרות וכל מספר מקבל תת כותרת משל עצמו )לפי הסדר, החל ממספר 2(. 3
ת" RSA key list במקרה והתקשורת מגיעה משרת מסוים בבעלות הבודק, בשרת יש ניהול של תעודות הצפנה, וכן יש לבודק הרשאות גישה מנת לפתוח בקשות. PKCS#12 keystore PEM לתעודות אלו ניתן להשתמש בהגדרה זו, המאפשרת להשתמש בתעודת ההצפנה על ישנם שני פורמטי קבצי מפתח הנתמכים על ידי :Wireshark לחיצה על הכפתור...Edit" פתח החלון הבא: - IP Address זהו שדה שהוא,detaeerpeD אבל נשאר מגרסאות x1 של.Wireshark הוא צריך להכיל את כתובת השרת, ב- IPv6 IPv4, או לכתוב את אחד מהדברים הבאים: IP כל כתובת - any כל כתובת IPv4 - anyipv4 כל כתובת IPv6 - anyipv6 0.0.0.0 השדה מאפשר ל- Wireshark לדעת איזו תעבורה לנסות ולנתח, במקום לנסות על הכל. 4
למשל 443 ל- HTTPS. מוצהר, בו שימוש לתעבורה. מדובר ב- port שנעשה מספר ה- port - Port - Protocol שם הפרוטוקול שנעשה בו שימוש ואותו רוצים לנתח. אני בד"כ שם TCP או UDP שם, לפחות בהתחלה. ארחיב את הנושא בפרק "עבודה עם מידע מוצפן". במידה והפרוטוקול אינו נתמך על ידי,Wireshark תדווח עלכך הודעת שגיאה בזמן העבודה: - Key File בחלק הזה יש צורך לשים את קובץ המפתח שדרכו רוצים לפתוח את התעבורה. כפי שהזכרתי בהתחלה, יש תמיכה בשני פורמטים עיקריים: PKCS#12 keystore PEM החלון לבחירת מחפש אינו הקבצים סיומת במידה אך מסוימת הודעת תוצג נתמך לא והפורמט שגיאה מתאימה בנושא. - Password לרוב נהוג לשים ססמה למפתח הנמצא בשימוש. במידה וזה המצב הקובץ עובר צורת הצפנה סימטרית, אשר דורשת את המפתח בשביל להצליח לקרוא את המידע של המפתח. אם המפתח תקין יהיה ניתן ללחוץ על OK בלי לקבל הודעת שגיאה, אחרת נקבל על כך הודעת שגיאה. כמובן, שדה זה רלוונטירק אם יש צורך בססמה. 5
SSL debug file הרבה פעמים לא ברור אם Wireshark מצליח לפתוח הצפנה או לא. האפשרות הזו, מאפשרת לקבל קובץ log בפורמט טקסט אשר מכיל את כל המידע שצריך בשביל להבין איך Wireshark מתמודד עם המידע. בקריאה של הקובץ ניתן למשל לראות אם הצליחה או לא הפתיחה של ההצפנה, ואם לא, מדוע לא. הגדרה זו מגדירה ל- Wireshark היכן לשמור את המידע, ולאיזה קובץ. Secret log filename-master (Pre) כאשר מדובר בתקשורת של,SSL למרות שהתעודות הצפנה יוצרות פעולות א-סימטריות, יש ססמה רנדומלית אשר נקבעת בין הלקוח לשרת בשביל להצפין את המידע. הססמה הזו יוצרת מצב שמתבצעת הצפנה סימטרית. הססמה הזו היא למעשה מה שמחפשים. חשוב להבין כי במקרה הזה אנו הלקוח, וללא הרשאות לקבל את מפתחות ההצפנה. על מנת להצליח ולקבל את המידע, ניתן לאפשר לתוכנה )במידה וזו תומכת בנושא(, ליצור קובץ debug בפורמט מסוים הנקרא בשם,NSS Key Log Format אשר Wireshark יודע לנתח ולאפשר לנתח את המידע שהוצפן. לצורך ההסבר אצא מנקודת הנחה כי אתם כמוני, עובדים בלינוקס, וב- Firefox. הדברים יעבדו גם עם כרום, אך אין לי ידע לגבי מערכות הפעלה אחרות והאם הסעיףהבא יעבוד גם שם. יש להריץ את הדפדפן עם משתנה סביבה בשם,SSLKEYLOGFILE בצורה שבה הוא מצביע לקובץ מסוים: $ SSLKEYLOGFILE=/tmp/ssl_key.log firefox הרצת השורה בשורת הפקודה )ניתן להחליף את firefox בchrome ( ללא סימן ה$, מוסיפה משתנה סביבה בשם ssl_key.log אשר במקרה הזה נשמר תחת ספריית. /tmp/ כעט אם אכנס לאתר כלשהו, והאתר משתמש בהצפנה, המידע על ההצפנה יכתב לקובץ, ובכך אפשר יהיה להשתמש בקובץ pcap שתוסף את התקשורת הנוכחית לפתוח את המידע. אדגיש כי כל תוכנה התומכת במשתנה הסביבה הזה ובפורמט הקובץ יוכלו לספק מענה שכזה, ו- firefox הוא רק הדגמה לנושא. 6
עבודה עם מידע מוצפן,Snakeoil2 בשביל Wireshark לאחר שהצורה המידע את לפתוח הוגדרה אשתמש של בהדגמה בשם להדגים מספר דברים. הורדתי את הקובץ והגדרתי לפי ההסבר בקובץ rsasnakeoil2.readme המצורף בקובץ הארכיב. חשוב לשים לב כי גם הגדרתי קובץ log על מנת לדעת מה הולך בפועל עם העבודה. 7
ניתן לראות כי למטה נוצרו טאבים אשר מדברים על משהו שפוענח. המידע הרגיל נשאר "זבל", אבל התוכן השתנה: 8
אז מה קרה כאן בעצם? הדרך הבטוחה להבין, היא ללכת אל קובץ ה- log : הפענוח כי להבין ניתן התוכן סוג של ניתוח הוגדר ולא היות אך הצליח מתקבל ה- payload כ- ב- TCP ולא כ- HTTP. Application Data 9
הפתרון למצב הוא די פשוט: הולכים להגדרות ה- SSL ומשנים את המידע מ- TCP ל- HTTP, והמידע ב- log ישתנה בהתאם: 01
כעת התצוגה גם תראה לגמרי שונה: מתי אגדיר בהגדרות הפתיחה למפתח HTTP ומתי אגדיר?TCP התשובה תלויה מאוד במה שרוצים להשיג, וכמובן בגישהשל הבודק. במידה וחשוב להבין את התקשורת עצמה, כלומר את פרוטוקול התעבורה, ופחות ה- Payload, אני לרוב מגדיר את הפרוטוקול כ- TCP. במידה וחשוב לי לדעת כי התעבורה היא אכן HTTP למשל )גם אם התוכן לא מעניין(, אגדיר כ- HTTP. הכל תלוי בבדיקה עצמה, ומה יסייע טוב יותר להשיג את המטרה. אני אישית תמיד מתחיל ב- TCP הרבה לפני שאני מתקדם לניתוח ה- Payload עצמו, וממליץ גם לכם לבצע זאת. 00
כישלון בפענוח הצפנות עד לנקודה הנוכחית הגדרתי במאמר את צורת העבודה בשביל לפתוח הצפנות. 2 אך Wireshark ההצפנות. יש סוגי בכל תומך אינו למעשה לו הצפנות סוגי )נכון נתמכות אינן אשר לכתיבת מאמר זה(: Payload הצפנה סימטרית - כלומר הצפנת Diffie Hellman הצפנות מבוססות במידה ואריץ את הפקודה הבאה: $ openssl ciphers -tls1 אקבל רשימה ארוכה של סוגי קידודים שונים הנתמכים על ידי TLS 1x ב- OpenSSL. ניתן לראות שם כל מיני שמות מוזרים: זוהי כמובן רשימה חלקית בלבד... CAMELLIA256-SHA PSK-AES256-CBC-SHA ECDHE-RSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-ECDSA-AES128-SHA256 ECDHE-RSA-AES128-SHA ECDHE-ECDSA-AES128-SHA SRP-DSS-AES-128-CBC-SHA SRP-RSA-AES-128-CBC-SHA SRP-AES-128-CBC-SHA DH-DSS-AES128-GCM-SHA256... כפי שניתן לראות יש כל מיני שמות קוד שונים. למשל EC מדבר על אלגוריתם.Elliptic Curve כאשר רואים את הצמד,DH ניתן לדעת כי בקידוד הזה יש שימוש באלגוריתם של,Diffie Hellman והוא לא יצליח להיות מפוענח על ידי Wireshark )ועל ידי כמעט כל מערכת ניתוח אחרת(. הסיבה לכך, היא שגישת Diffie Hellman היכולת לפתוח את המידע. מנסה למנוע ציתות למידע, וככזה האלגוריתם מקשה מאוד על 02
ניתן להתמודד עם הנושא על ידי הגדרה של Cipher Suites בשרתים שונים אשר מכילים רק הצפנות אשר כן ניתנות לפענח עם,Wireshark אך חשוב כי זה יתבצע רק לשם דגימה ובדיקה של המידע ולא כאופן פעולה מסודרשל שרת בעבודה שותפת שלו. כאשר מתחילה תקשורת יש מוצפנת בבקשה הראשונה מציעים של שונים סוגים,Handshake כאשר,ciphers ואם יש הסכמה אז תהיה תקשורת אשר מאשרת זאת. ההצעה מוגשת בצורה הבאה: 03
התשובה תראה כך: במידה ואחד מהתעבורות מכיל קידוד מסוג DH כלשהו אז ניתן לדעת כי לא ניתן יהיה לפענח את התקשורת עוד הרבה לפני בדיקה של קבצי.log סיכום בחלק זה, הצגתי כיצד ניתן לעבוד ב- Wireshark עם תקשורת מוצפנת. העבודה עם תקשורת מוצפנת חייבת מעט הבנה בתחום אך אינה דורשת ממי שמשתמש ב- Wireshark להיות בקיא בכל הנושא אלא רק בחלקים הנדרשים בשביל להבין את הבקשה מולו. בחלק כי גם לראות ניתן האחרון סיפקתי מספר אשר נקודות מסבירות בעיות ולהבין לדבג ניתן כיצד הקשורות לפענוח ההצפנה. ביביליוגרפיה Wireshark SSL NSS Key Log Format Snakeoil2 Diffie Hellman 04